Linux 命令行操作
一台完整的计算机是由运算器、控制器、存储器、输入/输出等多种硬件设备共同组成的,而能让各种硬件设备各司其职且又能协同运行的东西就是系统内核。Linux 系统的内核负责完成对硬件资源的分配、调度等管理任务,对系统的正常运行起着十分重要的作用。 Shell 就是终端程序的统称,它充当了人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端程序,它就会调用相应的程序服务去完成某些工作。现在包括红帽系统在内的许多主流Linux系统默认使用的终端是 Bash(Bourne-Again SHell)解释器,这个 Bash 解释器主要有以下4项优势:
- 通过上下方向键来调取执行过的 Linux 命令;
- 命令或参数仅需输入前几位就可以用 Tab 键补全;
- 具有强大的批处理脚本;
- 具有实用的环境变量功能。
执行命令
命令名称 [命令参数] [命令对象]
可选择的、可加或可不加的、非必需的参数使用中括号引起来,而命令所要求的、必须有的参数或对象值,则不带中括号。
命令名称:就是语法中的“动词”,表达的是想要做的事情,例如创建用户、查看文件、重启系统等操作。
命令参数:用于对命令进行调整,让“修改”过的命令能更好地贴合工作需求,达到事半功倍的效果。
Linux命令参数的长格式与短格式示例
| 长格式 | man --help |
|---|---|
| 短格式 | man -h |
- 命令对象:一般指要处理的文件、目录、用户等资源名称,也就是命令执行后的“承受方”。例如创建一位叫小明的用户、查看一个叫工资表的文件、重启一个IP为192.168.10.10的系统等。
Linux系统中的命令、参数、对象都是严格区分大小写的
帮助文档
man
使用 man 命令查看到的帮助内容信息
| 按键 | 作用 |
|---|---|
| 空格键 | 向下翻一页 |
| PaGe down | 向下翻一页 |
| PaGe up | 向上翻一页 |
| home | 直接前往首页 |
| end | 直接前往尾页 |
| / | 从上至下搜索某个关键词,如“/linux” |
| ? | 从下至上搜索某个关键词,如“?linux” |
| n | 定位到下一个搜索到的关键词 |
| N | 定位到上一个搜索到的关键词 |
| q | 退出帮助文档 |
示例
# 查看 man 的帮助文件
man man
# 查看 ssh 的帮助文件
man sh
快捷键
Tab
实现对命令、参数或文件的内容补全。
| 按键 | 作用 |
|---|---|
| Tab键 | 自动补全 |
| Tab键 + Tab键 | 匹配所有符合的命令 |
Ctrl+c
终止当前进程的运行,控制权会立刻回到命令行终端。
Ctrl+d
键盘输入结束。
Ctrl+l
清空当前终端中已有的内容(清屏操作)。
Ctrl+R
搜索之前使用过的命令。
Ctrl+Z
挂起当前进程。
常用命令
文件操作
| 命令 | 全拼 | 说明 |
|---|---|---|
| ls | list | 列出目录中的文件列表 |
| cd | change directory | 更改当前工作目录 |
| pwd | print working directory | 显示当前工作目录 |
| mkdir | make directory | 创建新目录 |
| rmdir | remove directory | 删除空目录 |
| touch | touch | 创建新文件 |
| cp | copy | 复制文件或目录 |
| mv | move | 移动文件或目录 |
| rm | remove | 删除文件或目录 |
文件处理
| 命令 | 全拼 | 说明 |
|---|---|---|
| cat | concatenate | 查看、合并文件内容 |
| head | head | 查看文件头部内容 |
| tail | tail | 查看文件尾部内容 |
| grep | global regular expression print | 在文件中查找指定文本 |
| sed | stream editor | 流编辑器,用于对文件进行基本文本处理 |
| awk | awk | 文本和数据处理工具 |
系统管理
| 命令 | 全拼 | 说明 |
|---|---|---|
| ps | process status | 查看进程状态 |
| top | top | 实时查看系统进程状态 |
| kill | kill | 终止进程 |
| shutdown | shutdown | 关闭系统 |
| reboot | reboot | 重启系统 |
| uname | uname | 显示系统信息 |
| df | disk free | 显示磁盘使用情况 |
| du | disk usage | 显示目录空间使用情况 |
| free | free | 显示系统内存使用情况 |
网络管理
| 命令 | 命令全拼 | 描述 |
|---|---|---|
| ip | internet protocol | 显示和配置网络接口信息 |
| ping | ping | 测试主机之间的连通性 |
| nslookup | name server lookup | 查询域名解析信息 |
| traceroute | trace route | 显示数据包到达目的地经过的路由信息 |
| route | route | 显示和配置系统的路由表 |
| netstat | network statistics | 显示网络连接状态和统计信息 |
| tcpdump | TCP dump | 抓取网络数据包并进行分析 |
权限管理
| 命令 | 命令全拼 | 描述 |
|---|---|---|
| chmod | change mode | 修改文件或目录的访问权限 |
| chown | change owner | 修改文件或目录的所有者 |
| chgrp | change group | 修改文件或目录的所属组 |
| useradd | user add | 添加用户账号 |
| usermod | user modify | 修改用户账号信息 |
| userdel | user delete | 删除用户账号 |
| groupadd | group add | 添加用户组 |
| groupmod | group modify | 修改用户组信息 |
| groupdel | group delete | 删除用户组 |
| passwd | password | 修改用户密码 |
| su | switch user | 切换用户身份 |
| sudo | superuser do | 以超级用户身份执行命令 |
| visudo | visual sudo | 编辑 sudo 配置文件 |
| id | identity | 显示当前用户信息 |
| whoami | who am i | 显示当前登录用户名 |
软件管理
| 命令 | 全拼 | 说明 |
|---|---|---|
| apt-get | Advanced Packaging Tool | Ubuntu系统软件包管理工具 |
| yum | Yellowdog Updater Modified | CentOS、Fedora等系统软件包管理工具 |
| dpkg | Debian Package | Debian、Ubuntu等系统软件包管理工具 |
| rpm | Red Hat Package Manager | CentOS、Fedora等系统软件包管理工具 |
磁盘管理
| 命令 | 全拼 | 描述 |
|---|---|---|
| df | disk filesystem | 显示磁盘空间使用情况 |
| du | disk usage | 显示文件和目录的磁盘使用情况 |
| fdisk | fixed disk | 磁盘分区管理工具 |
| fsck | file system check | 检查和修复文件系统 |
| mkfs | make filesystem | 创建文件系统 |
| mount | mount | 挂载文件系统到目录上 |
| umount | unmount | 卸载文件系统 |
进程管理
| 命令 | 命令全拼 | 描述 |
|---|---|---|
| ps | process status | 显示当前进程状态 |
| top | task-oriented processor | 动态显示进程信息 |
| kill | kill | 终止一个进程 |
| killall | killall | 终止一个指定名称的进程 |
| nice | nice | 改变进程优先级 |
| renice | renice | 改变正在运行进程的优先级 |
| jobs | jobs | 显示当前shell的活动作业 |
| bg | background | 将一个进程置于后台 |
| fg | foreground | 将一个进程置于前台 |
| nohup | no hang up | 在后台运行命令,并不挂起 |
| pstree | process tree | 显示进程树 |
重定向
输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到屏幕的数据信息写入到指定文件中。
标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或命令中输入。
标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕。
错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕。
对于重定向中的标准输出模式,可以省略文件描述符 1 不写,而错误输出模式的文件描述符 2 是必须要写的。
输入重定向
符号及其作用
| 符号 | 作用 |
|---|---|
| 命令 < 文件 | 将文件作为命令的标准输入 |
| 命令 << 分界符 | 从标准输入中读入,直到遇见分界符才停止 |
| 命令 < 文件1 > 文件2 | 将文件1作为命令的标准输入并将标准输出到文件2 |
输出重定向
| 符号 | 作用 |
|---|---|
| 命令 > 文件 | 将标准输出重定向到一个文件中(清空原有文件的数据) |
| 命令 2> 文件 | 将错误输出重定向到一个文件中(清空原有文件的数据) |
| 命令 >> 文件 | 将标准输出重定向到一个文件中(追加到原有内容的后面) |
| 命令 2>> 文件 | 将错误输出重定向到一个文件中(追加到原有内容的后面) |
| 命令 >> 文件 2>&1 或 命令 &>> 文件 | 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面 |
管道
管道命令符把前一个命令原本要输出到屏幕的信息当作后一个命令的标准输入,其执行格式为“命令A | 命令B”。按下键盘上的Shift+反斜杠(\)键即可输入管道符,
# 输出禁止登录用户行数
grep /sbin/nologin /etc/passwd | wc -l
# 搜索与 bash 有关的进程
ps aux | grep bash
命令符可以无限组合,例如:命令A | 命令B | 命令C |……
曾经有位东北的同学做了一个特别贴切的类比:把管道符当做流水线作业,这跟吃顿烧烤是同一个道理,即第一个人负责切肉,第二个人负责串肉,第三个人负责烧烤,最后的处理结果交付给用户。
通配符
| 通配符 | 含义 |
|---|---|
| * | 任意字符 |
| ? | 单个任意字符 |
| [a-z] | 单个小写字母 |
| [A-Z] | 单个大写字母 |
| [a-Z] | 单个字母 |
| [0-9] | 单个数字 |
| [[:alpha:]] | 任意字母 |
| [[:upper:]] | 任意大写字母 |
| [[:lower:]] | 任意小写字母 |
| [[:digit:]] | 所有数字 |
| [[:alnum:]] | 任意字母加数字 |
| [[:punct:]] | 标点符号 |
示例:
# 匹配 /dev 目录中且以 sda 开头的文件
ls -l /dev/sda*
转义字符
反斜杠(\):使反斜杠后面的一个变量变为单纯的字符。
单引号(' '):转义其中所有的变量为单纯的字符串。
双引号(" "):保留其中的变量属性,不进行转义处理。
反引号(` `):把其中的命令执行后返回结果。
环境变量
在Linux系统中,变量名称一般都是大写的,命令则都是小写的,这是一种约定俗成的规范。
Linux系统中最重要的 10 个环境变量
| 变量名称 | 作用 |
|---|---|
| HOME | 用户的主目录(即家目录) |
| SHELL | 用户在使用的Shell解释器名称 |
| HISTSIZE | 输出的历史命令记录条数 |
| HISTFILESIZE | 保存的历史命令记录条数 |
| 邮件保存路径 | |
| LANG | 系统语言、语系名称 |
| RANDOM | 生成一个随机数字 |
| PS1 | Bash解释器的提示符 |
| PATH | 定义解释器搜索用户执行命令的路径 |
| EDITOR | 用户默认的文本编辑器 |